import { http } from "@/utils/http";

// 预约订单数据类型定义（根据API文档5.7预约订单列表）
export interface Order {
  data_type: number; // 1 预约 2 临时占用
  date_long: string; // 时长
  l_id: string; // 订单id
  l_no: string; // 订单编号
  l_mid: string; // 客户id
  l_jmid: string; // 技师id
  l_pid: string; // 项目id
  l_pname: string; // 项目名
  l_mname: string; // 客户名
  l_mobile: string; // 客户手机
  l_yytime: string; // 预约时间（时间戳）
  l_origin: string; // 来源
  l_remark: string; // 备注
  l_price: string; // 单价
  l_num: string; // 数量
  l_project_time: string; // 单个项目时长（秒）
  l_totaltime: string; // 总时长（秒）
  l_shiyongtime: string; // 使用时间
  l_starttime: string; // 开始时间
  l_stoptime: string; // 停止时间
  l_endtime: string; // 结束时间
  l_prices: string; // 总价
  l_ystatus: string; // 预约状态：1 未到店，2 已到店，3 已超时，4 已取消
  l_status: string; // 状态
  l_pay_status: string; // 支付状态：1 待支付，2 已支付
  l_ctime: string; // 创建时间
  l_etime: string; // 编辑时间
  yydate: string; // 预约日期
  yydate_show: string; // 预约日期（显示）
  jname: string; // 技师名
  pay_status: string; //支付状态文本
  l_type?: string; // 上钟类型
  mstatus: string; // 会员状态
  mobile_val: string; // 手机号码展示值
}

// 新增/编辑预约参数类型（根据API文档5.1新增编辑预约）
export interface OrderActionParams {
  id?: number; // 预约id（编辑时填写）
  mid?: number; // 会员id
  name: string; // 顾客姓名
  mobile: string; // 顾客电话
  date: string; // 预约时间 (格式: 2025-06-11 16:05:00)
  tid?: string; // 员工id
  type?: string; // 上钟类型（tid存在时 此项必填）
  pid?: string; // 项目id
  remark?: string; // 备注
}

// 预约列表查询参数类型（根据API文档5.7预约订单列表）
export interface OrderListParams {
  start_date?: string; // 预约开始时间（可不传，查询当天）
  end_date?: string; // 预约结束时间
  keys?: string; // 项目，客户，手机号查询
  status?: number; // 状态：1 未到店，2 已到店，3 已超时，4 已取消
  page?: number; // 获取数据的页数 默认 1
  num?: number; // 每页数据条数 默认10,范围1-100
}

// API返回结果类型
export interface ApiResult<T = any> {
  code: number; // 状态码：1 成功
  msg: string; // 描述
  data: T; // 数据
}

// 预约列表返回数据类型
export interface OrderListData {
  total: number; // 数据总条数
  pages: number; // 总页数
  no: number; // 未到店数
  yes: number; // 已到店数
  timeout: number; // 已超时数
  cancel: number; // 已取消数
  list: Order[]; // 订单列表
}

// 预约日期类型（根据API文档5.2获取预约日期）
export interface AppointmentDate {
  date: string; // 日期 (格式: 2025-06-06 00:00:00)
  dayOfWeek: string | number; // 一周中的第几天
  dayOfWeekStr: string; // 周几 ("今天", "明天", "后天", "周一" 等)
}

// 预约员工类型（根据API文档5.3获取预约员工数据）
export interface AppointmentEmployee {
  t_id: string; // 员工id
  t_name: string; // 员工姓名
  t_mobile: string; // 员工电话
  t_sex: string; // 性别
  is_can: boolean; // 是否可约
  sex: string; // 性别中文
}

// 预约时间段类型（根据API文档5.4获取预约时间数据）
export interface TimeSlot {
  startDate: string; // 预约开始时间 (格式: 2025-06-06 12:15:00)
  canMakeAppointment: boolean; // 是否可以选择
}

/** 新增/编辑预约（根据API文档5.1新增编辑预约） */
export const orderAction = (params: OrderActionParams) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=action", {
    data: params
  });
};

/** 获取预约订单列表（根据API文档5.7预约订单列表） */
export const getOrderList = (params: OrderListParams = {}) => {
  return http.request<ApiResult<OrderListData>>(
    "post",
    "/admin/order.php?act=list",
    {
      data: params
    }
  );
};

/** 获取预约日期（根据API文档5.2获取预约日期） */
export const getAppointmentDates = () => {
  return http.request<ApiResult<AppointmentDate[]>>(
    "get",
    "/admin/order.php?act=date_list"
  );
};

/** 获取预约员工数据（根据API文档5.3获取预约员工数据） */
export const getAppointmentEmployees = (date: string) => {
  return http.request<ApiResult<AppointmentEmployee[]>>(
    "post",
    "/admin/order.php?act=employee_list",
    {
      data: { date }
    }
  );
};

/** 获取预约时间数据（根据API文档5.4获取预约时间数据） */
export const getTimeSlots = (date: string) => {
  return http.request<ApiResult<TimeSlot[]>>(
    "post",
    "/admin/order.php?act=time_list",
    {
      data: { date }
    }
  );
};

/** 取消预约（根据API文档5.5取消预约） */
export const cancelOrder = (params: {
  id: number | string;
  remark?: string;
}) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=cancel", {
    data: params
  });
};

/** 确认到店（根据API文档5.6确认到店） */
export const confirmArrival = (params: { id: number | string }) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=queren", {
    data: params
  });
};

/** 确认支付（根据API文档9.7确认支付） */
export const confirmPayment = (params: {
  id: number | string;
  amount: number;
}) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=queren_pay", {
    data: params
  });
};

// 未支付订单数据类型定义（根据API文档8.9未支付订单列表）
export interface UnpaidOrder {
  l_id: string; // 订单ID
  l_pname: string; // 项目名称
  l_mname: string; // 会员姓名
  l_mobile: string; // 手机号
  l_yytime: string; // 预约时间（时间戳）
  l_price: string; // 单价
}

/** 获取未支付订单列表（根据API文档8.9未支付订单列表） */
export const getUnpaidOrderList = (params: { mid: number }) => {
  return http.request<ApiResult<UnpaidOrder[]>>(
    "post",
    "/admin/order.php?act=nopaylist",
    {
      data: params
    }
  );
};

// 上钟类型数据类型定义
export interface ClockType {
  id: string | number; // 类型ID
  name: string; // 类型名称
}

/** 获取上钟类型（根据API文档9.11获取上钟类型） */
export const getClockTypes = () => {
  return http.request<ApiResult<Record<string, string> | ClockType[]>>(
    "post",
    "/admin/order.php?act=clock_type"
  );
};

/** 开始上钟（根据API文档9.12开始上钟） */
export const startClock = (params: { id: number | string }) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=clock_start", {
    data: params
  });
};

/** 确认已上钟（根据API文档9.13确认已上钟） */
export const confirmClock = (params: { id: number | string }) => {
  return http.request<ApiResult>("post", "/admin/order.php?act=clock_end", {
    data: params
  });
};

/** 导出预约订单数据（根据API文档9.9预约订单数据导出） */
export const exportOrderData = (params: {
  start_date?: string;
  end_date?: string;
  keys?: string;
  status?: number;
}) => {
  // 直接使用 axios 实例来获取完整的响应对象
  return http.request<any>(
    "post",
    "/admin/order.php?act=expdata",
    {
      data: params,
      responseType: "blob"
    },
    {
      beforeResponseCallback: response => {
        // 对于 blob 响应，返回包含 data 和 headers 的对象
        return {
          data: response.data,
          headers: response.headers
        };
      }
    }
  );
};

// 订单金额数据类型定义（根据API文档获取订单应支付金额）
export interface OrderAmount {
  c_name: string; // 卡名称
  l_prices: string; // 总价
  total: string; // 打折后的价格
}

/** 获取订单应支付金额（根据API文档获取订单应支付金额接口） */
export const getOrderAmount = (params: {
  cid: number | string; // 折扣卡ID
  oid: string; // 订单ID
}) => {
  return http.request<ApiResult<OrderAmount>>(
    "post",
    "/admin/order.php?act=get_order_amount",
    {
      data: params
    }
  );
};

// 上钟情况数据类型定义
export interface ClockSituation {
  jmid: string; // 技师ID
  jdate: string; // 日期范围
  jname: string; // 技师名称
  project_time: number; // 项目时长（分钟）
  shouprice: number; // 收入金额
  tichengprice: number; // 提成金额
  gongsiprice: number; // 公司金额
}

// 上钟情况列表查询参数类型
export interface ClockSituationParams {
  start_date?: string; // 开始时间
  end_date?: string; // 结束时间
  keys?: string; // 关键词
  jmid?: string; // 技师id
  page?: string; // 页数
  num?: string; // 每页数量
}

// 上钟情况列表返回数据类型
export interface ClockSituationData {
  title: string; // 标题
  list: ClockSituation[]; // 上钟情况列表
}

/** 获取上钟情况列表 */
export const getClockSituationList = (params: ClockSituationParams = {}) => {
  return http.request<ApiResult<ClockSituationData>>(
    "post",
    "/admin/shangzhong.php?act=list",
    {
      data: params
    }
  );
};

// 上钟详情数据类型定义
export interface ClockSituationDetail {
  l_no: string; // 订单编号
  l_pname: string; // 项目名称
  l_jmid: string; // 技师ID
  l_mname: string; // 会员名称
  l_pid: string; // 项目ID
  l_yytime: string; // 预约时间（时间戳）
  l_type: string; // 类型
  l_project_time: string; // 项目时长
  jname: string; // 技师名称
  l_yydate: string; // 预约日期
  project_time: number; // 项目时长（分钟）
  shouprice: string; // 收款金额
  tichengprice: string; // 提成金额
}

// 上钟详情查询参数类型
export interface ClockSituationDetailParams {
  start_date?: string; // 开始时间
  end_date?: string; // 结束时间
  keys?: string; // 关键词
  jmid: string; // 技师id（必填）
  page?: string; // 页数
  num?: string; // 每页数量
}

// 上钟详情返回数据类型
export interface ClockSituationDetailData {
  total: string | number; // 总条数（API返回的是字符串）
  pages: string | number; // 总页数（API返回的是字符串）
  detailsarr: ClockSituationDetail[]; // 详情列表
}

/** 获取上钟情况详情列表 */
export const getClockSituationDetails = (
  params: ClockSituationDetailParams
) => {
  return http.request<ApiResult<ClockSituationDetailData>>(
    "post",
    "/admin/shangzhong.php?act=szdetails",
    {
      data: params
    }
  );
};
